/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2025-04-07
 * Time: 15:09
 */
public class Main {
    public static void main(String[] args) {
        // 情况1：字符串字面量赋值（使用常量池）
        String s1 = "Java";//常量池中的对象
        String s2 = "Java";//复用常量池中的对象
        /*
         * true：因为字符串字面量会存储在常量池中
         * 两个变量都指向常量池中的同一个对象
         */
        System.out.println("s1 == s2? " + (s1 == s2)); // true

        // 情况2：使用new关键字创建字符串对象
        String s3 = new String("Java");//堆中新对象
        String s4 = new String("Java");//堆中新对象
        /*
         * false：每次new都会在堆内存中创建新的对象，s3和s4是两个不同的String对象
         * 即使内容相同，内存地址也不同
         */
        System.out.println("s3 == s4? " + (s3 == s4)); // false

        // 情况3：混合比较（常量池对象 vs 堆内存对象）
        /*
         * false：s1指向常量池，s3指向堆内存中的新对象
         * 内存地址不同
         */
        System.out.println("s1 == s3? " + (s1 == s3)); // false

        System.out.println("////////////////////////");
        // 内置类型（值类型）的 == 比较
        int a = 5;
        int b = 5;
        int c = 10;
        System.out.println(a == b); // true：a 和 b 的值均为5，值相等
        System.out.println(a == c); // false：a=5, c=10，值不同
    }
}
